/**
 * \file fréquence.c
 * \brief Driver du controle des fréquences.
 * \author Mengxuan.Z
 * \version 0.9
 * \date 222 février 2011
 *
 * Fichier d'implémentation des APIs de pilotage du potentiomètre numérique 
 * controlant la fréquence de l'autoradio.
 *
 */

#include <msp430x14x.h>
#include <io.h>
#include <signal.h>
#include <iomacros.h>
#include <stdio.h>
#include <stdlib.h>

#include "frequence.h"
#include "../utils/utils.h"

/**
 *\def		CS_ON
 P6.6
 *\def      CS_OFF  
 P6.6
 *\def      SEL_ON 
 P6.7
 *\def      SEL_OFF 
 P6.7
 */
#define			CS_ON				P6OUT |= BIT6     	//P6.6
#define			CS_OFF				P6OUT &= ~BIT6     	//P6.6
#define			SEL_ON				P6OUT |= BIT7     	//P6.7
#define			SEL_OFF				P6OUT &= ~BIT7     	//P6.7



int setFrequence(int dacValue)
{
	getBus();
	print_DAC(dacValue); //give new Frequence value
	releaseBus();
	return 0;
}


void print_DAC(int nb)
{
	int i,k=0;
	int n=0;
	char bin[11];
	SEL_OFF;		// select CNA path
	CS_ON;
	//delay (20,1);	// (10,1) ->82�s
	delayx100us(1);
	CS_OFF;
	i=1024;
	k=0;
	if (nb>1023) nb=1023;
	if (nb<0) nb=0;
	n=nb;
		while (k<11)
		{
			if ((n-i)<0) 
			{  
				P6OUT &=~0x70;	// DIN=0 	SCLK=0	 CS=0 	
			
				P6OUT |=0x20;	//SCLK=1
			
				P6OUT &=~0x20;	// SCLK=0
			
				bin[k]='0';
			}
			else if ((n-i)>=0)
			{
				P6OUT |=0x10;	// DIN=1 	SCLK=0	 CS=0 
							
				P6OUT |=0x20;	//SCLK=1
				
				P6OUT &=~0x20;	// SCLK=0
				
				bin[k]='1';
				n=n-i;
			}
			i=i/2;
			k=k+1;  
		}		
		// dumy LSB 2 bits
	P6OUT &=~0x70;	// DIN=0 	SCLK=0	 CS=0 
	P6OUT |=0x20;	//SCLK=1
	P6OUT &=~0x20;	// SCLK=0

	P6OUT &=~0x70;	// DIN=0 	SCLK=0	 CS=0 	
	P6OUT |=0x20;	//SCLK=1
	P6OUT &=~0x20;	// SCLK=0

	
	CS_ON;	
	delayMinMaj(200,10);
	SEL_ON;		// deselect CNA path
}	
